package com.cy.pj.sys.service.impl;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.cy.pj.common.bo.PageObject;
import com.cy.pj.common.exception.ServiceException;
import com.cy.pj.sys.dao.SysLogDao;
import com.cy.pj.sys.entity.SysLog;
import com.cy.pj.sys.service.SysLogService;

@Service
public class SysLogServiceImpl implements SysLogService{
	  @Autowired
     private SysLogDao sysLogDao;
	  @Override
	  public PageObject<SysLog> findPageObjects(
			  String username, Integer pageCurrent) {
		  //1.验证参数合法性(username允许为空)
		  //1.1验证pageCurrent的合法性，
		  //不合法抛出IllegalArgumentException异常
		  //"||"两侧不能颠倒
		  if(pageCurrent==null||pageCurrent<1)
			throw new IllegalArgumentException("当前页码不正确");
		//2.基于条件查询总记录数
		//2.1)执行查询
		  //假如在如下行出现空h指针,可能问题是神魔?sysLogDao变量为空
		int rowCount=sysLogDao.getRowCount(username);
		//2.2)验证查询结果,例如结果为0不在执行如下操作
		if(rowCount==0)
			 throw new ServiceException("系统没有查到对应记录");//此异常如何定义


		//3.基于条件查询当前页记录(pageSize定义为2)
		//3.1)定以pageSize
		//定义每页最多显示的记录数
		int pageSize=50;
		//3.2)计算startIndex  当前页的起始位置
		int startIndex=(pageCurrent-1)*pageSize;
		//3.3)执行当前数据的查询操作
		List<SysLog> records=
				sysLogDao.findPageObjects(username, startIndex, pageSize);
		//4.对分页信息以及当前的页面记录进行封装
		//4.1)构造PageObject对象
		//PageObject<SysLog> pageObject=new PageObject<>();
		//注意PageObject构造方法传参的顺序由构造方法定义时参数的顺序决定
		//4.2)封装数据
//		pageObject.setPageCurrent(pageCurrent);
//		pageObject.setPageSize(pageSize);
//		pageObject.setRowCount(rowCount);
//		pageObject.setRecords(records);
//		pageObject.setPageCount((rowCount-1)/pageSize+1);
//		//5.返回封装结果
//
//		return pageObject;
		return new PageObject<>(pageSize,rowCount,records,pageCurrent);
	}
	  @Override
	  public int deleteObjects(Integer... ids) {
	  		//1.判定参数合法性  IllegalArgumentException 用于参数异常
	  		if(ids==null||ids.length==0)
	  	    throw new IllegalArgumentException("请选择一个");
	  		//2.执行删除操作
	  		int rows;
	  		try{
	  		rows=sysLogDao.deleteObjects(ids);
	  		}catch(Throwable e){
	  		e.printStackTrace();
	  		//发出报警信息(例如给运维人员发短信)
	  		throw new ServiceException("系统故障，正在恢复中...");
	  		}
	  		//4.对结果进行验证
	  		if(rows==0)
	  		throw new ServiceException("记录可能已经不存在");
	  		//5.返回结果
	  		return rows;
	  }

	

}
